package org.apache.rocketmq.proxy.grpc.interceptor;

import io.grpc.*;


/**
 * @课程描述:从零带你写框架系列中的课程，整个系列包含netty，xxl-job，rocketmq，nacos，sofajraft，spring，springboot，disruptor，编译器，虚拟机等等。
 * @author：陈清风扬，个人微信号：chenqingfengyangjj。
 * @date:2025/1/3
 * @方法描述：这种拦截器在nacos中也用到了，大家应该有点印象了吧，这个上下文拦截器其实就是把metadata元数据信息放到了context中，这样就可以在后续的处理中获取到metadata了。
 */
public class ContextInterceptor implements ServerInterceptor {

    @Override
    public <R, W> ServerCall.Listener<R> interceptCall(
            ServerCall<R, W> call,
            Metadata headers,
            ServerCallHandler<R, W> next
    ) {//在这里把客户端传递过来的metadata放到了context中
        Context context = Context.current().withValue(InterceptorConstants.METADATA, headers);
        return Contexts.interceptCall(context, call, headers, next);
    }
}
